iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0

1. Loader 的作用

  • 輸入:Loader 的輸入是已編譯並連結好的可執行檔案(例如,a.out for RISC-V)。
  • 輸出:Loader 的輸出是程式開始執行,將可執行檔載入記憶體並啟動程式。
  • 可執行檔:可執行檔存儲於磁碟上,當執行一個程式時,Loader 將其載入記憶體,並開始運行該程式。
  • 操作系統角色:實際上,Loader 是作業系統(OS)的一部分,負責將程式載入記憶體。載入程式是 OS 的一項任務。

2. Loader 的具體功能

  • 將程式載入新的位址空間

    • Loader 首先讀取可執行檔案的文件頭,以了解文本段和數據段的大小。
    • 它會創建一個新的位址空間,該空間足夠存儲文本段、數據段以及一個堆疊段。
    • Loader 會將可執行文件中的指令和數據複製到新的位址空間中,並將傳遞給程式的參數複製到堆疊上。
  • 初始化機器暫存器

    • 大多數的暫存器會被清除,並且 堆疊指標(stack pointer,sp) 會被指向堆疊的第一個空閒位址。
  • 跳轉到啟動程式

    • Loader 會跳轉到啟動程式(start-up routine),該程式會執行以下操作:
      • 將傳遞給程式的參數從堆疊中複製到暫存器中,並設置程式計數器(PC)。
      • 如果主程式(main routine)執行完畢,則通過 exit 系統呼叫終止程式。

3. Loader 的詳細工作流程

  • 讀取可執行檔案頭:Loader 從可執行檔案中提取文本段和數據段的大小和位置,並在記憶體中分配相應的空間。
  • 創建位址空間:Loader 創建一個新的記憶體位址空間,並確保它有足夠的空間來存儲程式的文本、數據段,以及一個堆疊段。
  • 複製數據:將程式的指令和數據從可執行檔案中複製到位址空間。Loader 也會將傳遞給程式的參數放入堆疊中,以便程式能夠訪問這些參數。
  • 初始化暫存器:堆疊指標 sp 被初始化為堆疊的起始位址,其他暫存器則被清零。
  • 跳轉到程式的啟動地址:Loader 將程式的控制權交給其啟動程式,並設置程式計數器(PC)以開始執行程式。如果主程式返回,Loader 會執行系統呼叫來結束程式的執行。

上一篇
[Day27] CALL: Linker (3/5)
下一篇
[Day29] 總結與流程 (5/5)
系列文
RISC-V 與處理器之架構學習及應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言